package MultiMediaPlayer.Media.Proxy;

import MultiMediaPlayer.Media.Media;
import MultiMediaPlayer.Media.Playlist.PlayList;

//代理模式
public class MediaProxy implements Media {
    private final Media realMedia;
    private final String userName;

    public MediaProxy(Media realMedia, String userName) {
        this.realMedia = realMedia;
        this.userName = userName;
    }

    @Override
    public void play() {
        if (userName == null || userName.isEmpty()) {
            System.out.println("用户未登录，无法播放媒体。");
            return;
        }
        else {
            if (!userName.equals("admin")) {
                System.out.println("用户 " + userName + " 没有权限播放此媒体。");
                return;
            }
        }

        System.out.println("用户权限验证通过，开始播放媒体...");

        //如果代理播放的是列表，需要获取列表内所有媒体的名称并标记已播放
        if(realMedia instanceof PlayList) {
            realMedia.play();
            System.out.println("日志记录如下：" + "\n");
            ((PlayList)realMedia).getMediaList().forEach(media -> {
                System.out.println(media.getName() + "-已播放");
            });
        } else {
            //如果代理播放的是单个媒体，直接标记已播放
            realMedia.play();
            System.out.println(realMedia.getName() + "-已播放");
        }
    }

    @Override
    public String getDescription() {
        return realMedia.getDescription();
    }

    @Override
    public String getName() {
        return realMedia.getName();
    }
}
